package design.Test5decorator;

/**
 * 抽象装饰者。比如我们需要做红茶，就需要 sugarDecorator(糖)+ redTeaDecorator(红茶叶)
 * sugarDecorator 和redTeaDecorator 都要继承此类，而此类要继承 Component
 * Decorator 之所以要继承 Component 是为了维持接口规范，
 */
public abstract class Decorator extends Component {
    //装饰者持有对component的引用
    Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    //所有的原料装饰者都要重新实现此类(可以没有，主要用于抽取子类共有)
    public abstract String getDesc();

    @Override
    public String cost() {
        return component.cost();
    }
}

